page.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. 'use client';
  2. import { useState } from 'react';
  3. import { useParams } from 'next/navigation';
  4. import Link from 'next/link';
  5. import { useCrewWidgetConfigContext } from '../../context';
  6. import { type FormState, createEmptyForm } from '../../types';
  7. import CrewWidgetFormPanel from '../../_components/CrewWidgetFormPanel';
  8. import CrewWidgetPreviewPanel from '../../_components/CrewWidgetPreviewPanel';
  9. import { Separator } from '@/components/ui/separator';
  10. export default function CrewWidgetEditPage()
  11. {
  12. const { id } = useParams<{ id: string }>();
  13. const { items, loading } = useCrewWidgetConfigContext();
  14. const [form, setForm] = useState<FormState>(createEmptyForm());
  15. if (loading) {
  16. return <p className="studio-page__empty">준비 중...</p>;
  17. }
  18. const item = items.find(i => i.id === Number(id));
  19. if (!item) {
  20. return <p className="studio-page__empty">설정을 찾을 수 없습니다.</p>;
  21. }
  22. return (
  23. <>
  24. <div className="studio-page__title-row">
  25. <h1 className="studio-page__title">크루 위젯 수정</h1>
  26. <Link href="/studio/donation/crew/widget/list" className="text-sm text-muted-foreground hover:text-foreground">< 목록으로</Link>
  27. </div>
  28. <div className="pt-4 pb-4">
  29. <Separator orientation="horizontal" />
  30. </div>
  31. <div className="crew-widget-layout">
  32. <CrewWidgetPreviewPanel form={form} />
  33. <Separator orientation="vertical" />
  34. <CrewWidgetFormPanel editItem={item} form={form} onFormChange={setForm} />
  35. </div>
  36. </>
  37. );
  38. }